# vim:set et ts=4:
#
# ibus - The Input Bus
#
# Copyright (c) 2007-2016 Peng Huang <shawn.p.huang@gmail.com>
# Copyright (c) 2015-2019 Takao Fujiwara <takao.fujiwara1@gmail.com>
# Copyright (c) 2007-2019 Red Hat, Inc.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301
# USA


# If ibus_released is 0, append datestamp to the version number.
m4_define([ibus_released], [1])

m4_define([ibus_major_version], [1])
m4_define([ibus_minor_version], [5])
m4_define([ibus_micro_version], [21])
m4_define([ibus_abi_current], [5])
m4_define([ibus_abi_revision],
          [m4_eval(100 * ibus_minor_version + ibus_micro_version)])
m4_define([ibus_abi_age], [0])
m4_define([ibus_maybe_datestamp],
    m4_esyscmd([test x]ibus_released[ != x1 && date +.%Y%m%d | tr -d '\n\r']))
m4_define([ibus_version],
    ibus_major_version.ibus_minor_version.ibus_micro_version[]ibus_maybe_datestamp)
m4_define([ibus_api_version], [ibus_major_version.0])

AC_PREFEQ([2.62])
AC_INIT([ibus], [ibus_version],
        [https://github.com/ibus/ibus/issues],
        [ibus])

AC_CONFIG_HEADERS([config.h])
AC_CONFIG_MACRO_DIR([m4])

m4_define([ibus_abi_current_minus_age],
          [m4_eval(ibus_abi_current - ibus_abi_age)])
m4_define([ibus_binary_version],
          [ibus_major_version.ibus_abi_current_minus_age.ibus_abi_age.ibus_abi_revision])

# Required versions of other packages.
m4_define([glib_required_version], [2.46.0])
m4_define([gtk3_required_version], [3.12.0])

# VALA_TARGET_GLIB_VERSION is used by valac --ccode --target-glib .
# VALA_TARGET_GLIB_VERSION and glib_required_version will be different
# in the future.
VALA_TARGET_GLIB_VERSION=2.46
AC_SUBST(VALA_TARGET_GLIB_VERSION)

# Init automake.
AM_INIT_AUTOMAKE([1.11.1 parallel-tests])
AM_MAINTAINER_MODE([enable])
AC_GNU_SOURCE

# Support silent build rules. Disable
# by either passing --disable-silent-rules to configure or passing V=1
# to make
AM_SILENT_RULES([yes])

# Define sustituted variables:
IBUS_MAJOR_VERSION=ibus_major_version
IBUS_MINOR_VERSION=ibus_minor_version
IBUS_MICRO_VERSION=ibus_micro_version
IBUS_ABI_CURRENT=ibus_abi_current
IBUS_ABI_REVISION=ibus_abi_revision
IBUS_ABI_AGE=ibus_abi_age
IBUS_VERSION=ibus_version
IBUS_API_VERSION=ibus_api_version
IBUS_BINARY_VERSION=ibus_binary_version
AC_SUBST(IBUS_MAJOR_VERSION)
AC_SUBST(IBUS_MINOR_VERSION)
AC_SUBST(IBUS_MICRO_VERSION)
AC_SUBST(IBUS_ABI_CURRENT)
AC_SUBST(IBUS_ABI_REVISION)
AC_SUBST(IBUS_ABI_AGE)
AC_SUBST(IBUS_API_VERSION)
AC_SUBST(IBUS_VERSION)
AC_SUBST(IBUS_BINARY_VERSION)

# libtool versioning
#
# If LT_VERSION_INFO="lt_current:lt_revision:lt_age", libibus is
# libibus-ibus_api_version.so.(lt_current - lt_age).lt_age.lt_revision
# If the abi is changed, but it is compatible with last version,
# ibus_abi_current++, ibus_abi_age++;
# If the abi is not compatible with last version,
# ibus_abi_current++, ibus_abi_age = 0;
m4_define([lt_current], [ibus_abi_current])
m4_define([lt_revision], [ibus_abi_revision])
m4_define([lt_age], [ibus_abi_age])
LT_VERSION_INFO="lt_current:lt_revision:lt_age"
LT_CURRENT_MINUS_AGE=m4_eval(lt_current - lt_age)
AC_SUBST(LT_VERSION_INFO)
AC_SUBST(LT_CURRENT_MINUS_AGE)

# Define GETTEXT_* variables.
GETTEXT_PACKAGE=ibus10
AC_SUBST(GETTEXT_PACKAGE)
AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE",
                   [The prefix for out gettext translation domains.])
DEFINE_IBUS_LOCALEDIR
AC_DEFINE_UNQUOTED(LOCALEDIR, "$ibus_localedir",
                   [Define the location where the catalogs will be installed])

# For dislpay date.
m4_define(ibus_datedisplay,
    m4_esyscmd(date '+%a %b %d %Y' | tr -d '\n\r'))
DATE_DISPLAY="ibus_datedisplay"
AC_SUBST(DATE_DISPLAY)


# Check for programs.
AC_PROG_CC
AM_PROG_CC_C_O
AC_PROG_CC_STDC
AM_PROG_VALAC([0.20])
AC_PROG_INSTALL
AC_PROG_MAKE_SET

# i18n stuff
AM_GNU_GETTEXT_VERSION([0.19.8])
AM_GNU_GETTEXT([external])

# Define PACKAGE_VERSION_* variables.
AM_DISABLE_STATIC
AC_ISC_POSIX
AC_HEADER_STDC
LT_INIT

# Check header filess.
AC_CHECK_HEADERS([sys/prctl.h])

# Check functions.
AC_CHECK_FUNCS(daemon)

# Check packages.
# Check glib2.
AM_PATH_GLIB_2_0
PKG_CHECK_MODULES(GLIB2, [
    glib-2.0 >= glib_required_version
])
PKG_CHECK_MODULES(GOBJECT2, [
    gobject-2.0 >= glib_required_version
])
PKG_CHECK_MODULES(GIO2, [
    gio-2.0 gio-unix-2.0 >= glib_required_version
])
PKG_CHECK_MODULES(GTHREAD2, [
    gthread-2.0 >= glib_required_version
])

# --disable-tests option.
AC_ARG_ENABLE(tests,
    AS_HELP_STRING([--disable-tests],
                   [Do not run tests]),
    [enable_tests=$enableval],
    [enable_tests=yes]
)
AM_CONDITIONAL([ENABLE_TESTS], [test x"$enable_tests" = x"yes"])
if test x"$enable_tests" != x"yes"; then
    enable_tests="no (disabled, use --enable-tests to enable)"
fi

# --disable-gtk2 option.
AC_ARG_ENABLE(gtk2,
    AS_HELP_STRING([--disable-gtk2],
                   [Do not build gtk2 im module]),
    [enable_gtk2=$enableval],
    [enable_gtk2=yes]
)
AM_CONDITIONAL([ENABLE_GTK2], [test x"$enable_gtk2" = x"yes"])

# --disable-gtk3 option.
AC_ARG_ENABLE(gtk3,
    AS_HELP_STRING([--disable-gtk3],
                   [Do not build gtk3 im module]),
    [enable_gtk3=$enableval],
    [enable_gtk3=yes]
)
AM_CONDITIONAL([ENABLE_GTK3], [test x"$enable_gtk3" = x"yes"])

# --disable-xim option.
AC_ARG_ENABLE(xim,
    AS_HELP_STRING([--disable-xim],
                   [Do not build xim server]),
    [enable_xim=$enableval],
    [enable_xim=yes]
)
AM_CONDITIONAL([ENABLE_XIM], [test x"$enable_xim" = x"yes"])

if test x"$enable_xim" = x"yes"; then
    AC_SUBST([XIM_CLI_ARG], [--xim])
fi

# --enable-wayland option.
AC_ARG_ENABLE(wayland,
    AS_HELP_STRING([--enable-wayland],
                   [Build wayland support]),
    [enable_wayland=$enableval],
    [enable_wayland=no]
)
AM_CONDITIONAL([ENABLE_WAYLAND], [test x"$enable_wayland" = x"yes"])

# --enable-appindicator option.
AC_ARG_ENABLE(appindicator,
    AS_HELP_STRING([--enable-appindicator],
                   [Build appindicator support]),
    [enable_appindicator=$enableval],
    [enable_appindicator=yes]
)
AM_CONDITIONAL([ENABLE_APPINDICATOR], [test x"$enable_appindicator" = x"yes"])

if test x"$enable_gtk2" = x"yes"; then
    # check for gtk2
    PKG_CHECK_MODULES(GTK2, [
        gtk+-2.0
    ])

    gtk2_binary_version=`$PKG_CONFIG --variable=gtk_binary_version gtk+-2.0`
    GTK2_IM_MODULEDIR="$libdir"/gtk-2.0/$gtk2_binary_version/immodules
else
    enable_gtk2="no (disabled, use --enable-gtk2 to enable)"
fi

if test x"$enable_gtk3" = x"yes"; then
    # check for gtk3
    PKG_CHECK_MODULES(GTK3, [
        gtk+-3.0 >= gtk3_required_version
    ])
    PKG_CHECK_EXISTS([gdk-wayland-3.0],
        [enable_gdk3_wayland=yes],
        [enable_gdk3_wayland=no]
    )

    gtk3_binary_version=`$PKG_CONFIG --variable=gtk_binary_version gtk+-3.0`
    GTK3_IM_MODULEDIR="$libdir"/gtk-3.0/$gtk3_binary_version/immodules
else
    enable_gtk3="no (disabled, use --enable-gtk3 to enable)"
    enable_gdk3_wayland=no
fi
if test x"$enable_gdk3_wayland" != x"yes"; then
    enable_gdk3_wayland="no (disabled, need to install gdk-wayland-3.0.pc)"
fi
AM_CONDITIONAL([ENABLE_GDK3_WAYLAND], [test x"$enable_gdk3_wayland" = x"yes"])

if test x"$enable_xim" = x"yes"; then
    # Check for x11
    PKG_CHECK_MODULES(X11, [
        x11
    ])
    AC_CHECK_HEADERS([X11/XKBlib.h])

    # if we don't have gtk3 yet, check for gtk2
    if test x"$enable_gtk3" != x"yes"; then
        # check for gtk2
        PKG_CHECK_MODULES(GTK2, [
            gtk+-2.0
        ])
    fi
else
    enable_xim="no (disabled, use --enable-xim to enable)"
fi

if $PKG_CONFIG --exists x11; then
    X11_PREFIX="`$PKG_CONFIG --variable=prefix x11`"
elif test x"$prefix" != xNONE; then
    X11_PREFIX="$prefix"
else
    X11_PREFIX="$ac_default_prefix"
fi
AC_SUBST(X11_PREFIX)

if test x"$enable_wayland" = x"yes"; then
    # Check for wayland
    PKG_CHECK_MODULES(WAYLAND, [
        wayland-client >= 1.2.0
        xkbcommon
    ])
    m4_ifdef([WAYLAND_SCANNER_RULES],
             [WAYLAND_PRTCLS_SUBDIR='wayland-protocols/unstable/input-method'
              AC_SUBST(WAYLAND_PRTCLS_SUBDIR)
              WAYLAND_SCANNER_RULES(['$(datadir)/$(WAYLAND_PRTCLS_SUBDIR)'])],
             [AC_SUBST(wayland_scanner_rules)])
else
    enable_wayland="no (disabled, use --enable-wayland to enable)"
    AC_SUBST(wayland_scanner_rules)
fi

enable_appindicator_engine_icon="no"
if test x"$enable_appindicator" = x"yes"; then
    enable_appindicator="yes (enabled, use --disable-appindicator to disable)"

    # Need qt5-qtbase-devel package
    # There is no way to check the version of KStatusNotifierItem and
    # check the version of qtbase here.
    AC_MSG_CHECKING([for KDE5 appindicator engine icon])
    PKG_CHECK_EXISTS([Qt5Gui >= 5.4],
        enable_appindicator_engine_icon="yes"
    )
    AC_MSG_RESULT([$enable_appindicator_engine_icon])

fi
if test x"$enable_appindicator_engine_icon" != x"yes" ; then
    enable_appindicator_engine_icon="no (disabled, need qtbase-devel 5.4 or later)"
fi
AM_CONDITIONAL([ENABLE_APPINDICATOR_ENGINE_ICON],
               [test x"$enable_appindicator_engine_icon" = x"yes"])

# GObject introspection
GOBJECT_INTROSPECTION_CHECK([0.6.8])

IBUS_GIR_SCANNERFLAGS=
if test x"$found_introspection" = x"yes" ; then
    IBUS_GIR_SCANNERFLAGS="--warn-all --identifier-prefix=IBus --symbol-prefix=ibus --c-include=ibus.h"
    PKG_CHECK_EXISTS([gobject-introspection-1.0 >= 0.9.6],
                     [gir_symbol_prefix=yes],
                     [gir_symbol_prefix=no])
    if test x"$gir_symbol_prefix" = x"no" ; then
        IBUS_GIR_SCANNERFLAGS="--strip-prefix=IBus"
    fi
fi
AC_SUBST(IBUS_GIR_SCANNERFLAGS)

# Check vapigen.
VAPIGEN_CHECK([0.16])

# Check for gtk-doc.
GTK_DOC_CHECK(1.9)
if test x"$enable_gtk_doc" = x"no"; then
    enable_gtk_doc="no (disabled, use --enable-gtk-doc to enable)"
fi

# Check for dbus.
PKG_CHECK_MODULES(DBUS, [
    dbus-1
])

# --enable-memconf option.
AC_ARG_ENABLE(memconf,
    AS_HELP_STRING([--enable-memconf],
                   [Enable configure base on memory]),
    [enable_memconf=$enableval],
    [enable_memconf=no]
)
AM_CONDITIONAL([ENABLE_MEMCONF], [test "x$enable_memconf" = "xyes"])

AC_ARG_ENABLE(dconf,
    AS_HELP_STRING([--disable-dconf],
                   [Disable configure base on dconf]),
    [enable_dconf=$enableval],
    [enable_dconf=yes]
)
AM_CONDITIONAL([ENABLE_DCONF], [test x"$enable_dconf" = x"yes"])

if test x"$enable_dconf" = x"yes"; then
    # check dconf
    PKG_CHECK_MODULES(DCONF,
        [dconf >= 0.7.5],
    )
    PKG_CHECK_EXISTS([dconf >= 0.13.4],
        [AC_DEFINE(DCONF_0_13_4, TRUE, [dconf is 0.13.4 or later])],
        [])
    # check glib-compile-schemas
    GLIB_GSETTINGS
    enable_dconf="yes (enabled, use --disable-dconf to disable)"
fi

# Check env.
AC_PATH_PROG(ENV_IBUS_TEST, env)
AC_SUBST(ENV_IBUS_TEST)

AC_ARG_ENABLE(python2,
    AS_HELP_STRING([--disable-python2],
                   [Do not install bindings/pygobject/gi and ibus for python2.
                    '--disable-python2' bring '--disable-python-library'.]),
    [enable_python2=$enableval],
    [enable_python2=yes]
)

AC_ARG_ENABLE(python-library,
    AS_HELP_STRING([--enable-python-library],
                   [Use ibus python library]),
    [enable_python_library=$enableval],
    [enable_python_library=no]
)

AC_ARG_ENABLE(setup,
    AS_HELP_STRING([--disable-setup],
                   [Do not use setup ui.]),
    [enable_setup=$enableval],
    [enable_setup=yes]
)

# Define python version
AC_ARG_WITH(python,
    AS_HELP_STRING([--with-python[=PATH]],
        [Select python2 or python3]),
    [PYTHON=$with_python], []
)

AM_PATH_PYTHON([2.5])

if test x"$enable_python2" != x"yes"; then
    enable_python_library=no
    PYTHON2=
    enable_python2="no (disabled, use --enable-python2 to enable)"
else
    AC_PATH_PROG(PYTHON2, python2)

    if test x"$PYTHON2" = x""; then
        PYTHON2=$PYTHON
    fi
fi

AM_CONDITIONAL([ENABLE_PYTHON2], [test x"$enable_python2" = x"yes"])
AM_CONDITIONAL([ENABLE_PYTHON_LIBRARY], [test x"$enable_python_library" = x"yes"])
AM_CONDITIONAL([ENABLE_SETUP], [test x"$enable_setup" = x"yes"])
AM_CONDITIONAL([ENABLE_DAEMON], [true])

PYGOBJECT_REQUIRED=3.0.0

PKG_CHECK_EXISTS([pygobject-3.0 >= $PYGOBJECT_REQUIRED],
                 [enable_pygobject=yes], [enable_pygobject=no])

if test "x$enable_pygobject" = "xyes"; then
    PKG_CHECK_MODULES(PYTHON, [pygobject-3.0 >= $PYGOBJECT_REQUIRED])

    pyoverridesdir=`$PYTHON -c "import gi; print(gi._overridesdir)"`
    AC_SUBST(pyoverridesdir)

    if test x"$enable_python2" = x"yes"; then
        py2overridesdir=`$PYTHON2 -c "import gi; print(gi._overridesdir)"`
        AC_SUBST(py2overridesdir)
    fi
fi

AM_CONDITIONAL(ENABLE_PYGOBJECT, test x"$enable_pygobject" = "xyes")

if test x"$enable_python_library" = x"yes"; then
    # Check python.
    AC_PATH_PROG(PYTHON_CONFIG, python$PYTHON_VERSION-config)
    if test x"$PYTHON_CONFIG" = x""; then
        AC_PATH_PROG(PYTHON_CONFIG, python-config)
    fi
    if test x"$PYTHON_CONFIG" != x""; then
        PYTHON_CFLAGS=`$PYTHON_CONFIG --includes`
        PYTHON_LIBS=`$PYTHON_CONFIG --libs`
    else
        PYTHON_CFLAGS=`$PYTHON $srcdir/python-config.py --includes`
        PYTHON_LIBS=`$PYTHON $srcdir/python-config.py --libs`
    fi
    PYTHON_INCLUDES="$PYTHON_CFLAGS"
    AC_SUBST(PYTHON_CFLAGS)
    AC_SUBST(PYTHON_INCLUDES)
    AC_SUBST(PYTHON_LIBS)

    PYTHON2_PREFIX=`$PYTHON2 -c "import sys; sys.stdout.write(sys.prefix)"`
    PYTHON2_VERSION=`$PYTHON2 -c "import sys; sys.stdout.write(sys.version[[:3]])"`
    PYTHON2_LIBDIR="$PYTHON2_PREFIX/lib/python$PYTHON2_VERSION"
    python2dir="$PYTHON2_LIBDIR/site-packages"
    pkgpython2dir="$python2dir/ibus"
    AC_SUBST(pkgpython2dir)
else
    enable_python_library="no (disabled, use --enable-python-library to enable)"
fi

# Define gtk2 immodule dir.
AC_ARG_WITH(gtk2-im-module-dir,
    AS_HELP_STRING([--with-gtk2-im-module-dir[=DIR]],
        [Select gtk2 immodule dir]),
    GTK2_IM_MODULEDIR=$with_gtk2_im_module_dir
)
AC_SUBST(GTK2_IM_MODULEDIR)

# Define gtk3 immodule dir.
AC_ARG_WITH(gtk3-im-module-dir,
    AS_HELP_STRING([--with-gtk3-im-module-dir[=DIR]],
        [Select gtk3 immodule dir]),
    GTK3_IM_MODULEDIR=$with_gtk3_im_module_dir
)
AC_SUBST(GTK3_IM_MODULEDIR)

if test x"$enable_python" = x"yes"; then
    # Check for dbus-python.
    AC_ARG_ENABLE(dbus-python-check,
        AS_HELP_STRING([--disable-dbus-python-check],
            [Do not check dbus-python]),
        [enable_dbus_python_check=$enableval],
        [enable_dbus_python_check=yes]
    )
    PKG_CHECK_MODULES(DBUS_PYTHON,
        [dbus-python >= 0.83.0],
        [IBUS_HAS_DBUS_PYTHON=yes],
        [IBUS_HAS_DBUS_PYTHON=no]
    )
    if test x"$IBUS_HAS_DBUS_PYTHON" != x"yes"; then
        if test x"$enable_dbus_python_check" != x"no"; then
            AC_MSG_ERROR([can not find dbus-python >= 0.83.0. Please install or update dbus-python.])
        else
            AC_MSG_WARN([can not find dbus-python >= 0.83.0. It is required.])
        fi
    fi
fi

# Option for always disable snooper applications.
AC_ARG_ENABLE(key-snooper,
    AS_HELP_STRING([--disable-key-snooper],
        [Always disable key snooper in gtk im module]),
    [enable_key_snooper=$enableval],
    [enable_key_snooper=yes]
)
if test x"$enable_key_snooper" = x"yes"; then
    AC_DEFINE(ENABLE_SNOOPER, TRUE, [Enable key snooper])
else
    AC_DEFINE(ENABLE_SNOOPER, FALSE, [Enable key snooper])
    enable_key_snooper="no (disabled, use --enable-key-snooper to enable)"
fi

# Option for no snooper applications.
AC_ARG_WITH(no-snooper-apps,
    AS_HELP_STRING([--with-no-snooper-apps[=regex1,regex2]],
        [Does not enable keyboard snooper in those applications (like: .*chrome.*,firefox.*)]),
    NO_SNOOPER_APPS=$with_no_snooper_apps,
    NO_SNOOPER_APPS=[firefox.*,.*chrome.*,.*chromium.*,terminator]
)
AC_DEFINE_UNQUOTED(NO_SNOOPER_APPS, "$NO_SNOOPER_APPS",
    [Does not enbale keyboard snooper in those applications])

# GNOME 3 uses the theme's icon.
AC_ARG_WITH(panel-icon-keyboard,
    AS_HELP_STRING([--with-panel-icon-keyboard[=icon_name]],
        [Set the default panel icon (default: "ibus-keyboard")]),
    [if test x"$with_panel_icon_keyboard" = x"yes" -o \
             x"$with_panel_icon_keyboard" = x; then
         with_panel_icon_keyboard="input-keyboard-symbolic"
     fi
     if test x"$with_panel_icon_keyboard" = x"legacy"; then
         with_panel_icon_keyboard="ibus-keyboard"
     fi
     IBUS_ICON_KEYBOARD=$with_panel_icon_keyboard
    ],
    IBUS_ICON_KEYBOARD="ibus-keyboard"
)
AC_SUBST(IBUS_ICON_KEYBOARD)

# --disable-surrounding-text option.
AC_ARG_ENABLE(surrounding-text,
    AS_HELP_STRING([--disable-surrounding-text],
        [Enable surrounding-text support]),
    [enable_surrounding_text=$enableval],
    [enable_surrounding_text=yes]
)
if test x"$enable_surrounding_text" = x"yes"; then
    AC_DEFINE(ENABLE_SURROUNDING, TRUE, [Enable surrounding-text support])
else
    enable_surrounding_text="no (disabled, use --enable-surrounding-text to enable)"
fi

# --disable-ui
AC_ARG_ENABLE(ui,
    AS_HELP_STRING([--disable-ui],
                   [Disable ibus default user interface]),
    [enable_ui=$enableval],
    [enable_ui=yes]
)
AM_CONDITIONAL([ENABLE_UI], [test x"$enable_ui" = x"yes"])
if test x"$enable_ui" = x"yes"; then
    # Check for x11
    PKG_CHECK_MODULES(X11, [
        x11
    ])
    enable_ui="yes (enabled, use --disable-ui to disable)"
fi

# --disable-engine
AC_ARG_ENABLE(engine,
    AS_HELP_STRING([--disable-engine],
                   [Disable ibus simple engine]),
    [enable_engine=$enableval],
    [enable_engine=yes]
)
AM_CONDITIONAL([ENABLE_ENGINE], [test x"$enable_engine" = x"yes"])
if test x"$enable_engine" = x"yes"; then
    enable_engine="yes (enabled, use --disable-engine to disable)"
fi

PKG_CHECK_MODULES(XTEST,
    [x11 xtst],
    [enable_xtest=yes],
    [enable_xtest=no]
)
AM_CONDITIONAL([ENABLE_XTEST], [test x"$enable_xtest" = x"yes"])

# --enable-install-tests
AC_ARG_ENABLE(install-tests,
    AS_HELP_STRING([--enable-install-tests],
                   [Enable to install tests]),
    [enable_install_tests=$enableval],
    [enable_install_tests=no]
)
AM_CONDITIONAL([ENABLE_INSTALL_TESTS], [test x"$enable_install_tests" = x"yes"])
if test x"$enable_install_tests" = x"no"; then
    enable_install_tests="no (disabled, use --enable-install-tests to enable)"
fi


# --disable-emoji-dict option.
AC_ARG_ENABLE(emoji-dict,
    AS_HELP_STRING([--disable-emoji-dict],
                   [Do not build Emoji dict files]),
    [enable_emoji_dict=$enableval],
    [enable_emoji_dict=yes]
)
AM_CONDITIONAL([ENABLE_EMOJI_DICT], [test x"$enable_emoji_dict" = x"yes"])

AC_ARG_WITH(unicode-emoji-dir,
    AS_HELP_STRING([--with-unicode-emoji-dir[=DIR]],
        [Set the directory of Unicode Emoji.
         (default: "/usr/share/unicode/emoji")]),
    UNICODE_EMOJI_DIR=$with_unicode_emoji_dir,
    UNICODE_EMOJI_DIR="/usr/share/unicode/emoji"
)
AC_SUBST(UNICODE_EMOJI_DIR)

AC_ARG_WITH(emoji-annotation-dir,
    AS_HELP_STRING([--with-emoji-annotation-dir[=DIR]],
        [Set the directory of CLDR annotation files.
         (default: "/usr/share/unicode/cldr/common/annotations")]),
    EMOJI_ANNOTATION_DIR=$with_emoji_annotation_dir,
    EMOJI_ANNOTATION_DIR="/usr/share/unicode/cldr/common/annotations"
)
AC_SUBST(EMOJI_ANNOTATION_DIR)

if test x"$enable_emoji_dict" = x"yes"; then
    if test ! -f $UNICODE_EMOJI_DIR/emoji-test.txt ; then
        AC_MSG_ERROR(Not found $UNICODE_EMOJI_DIR/emoji-test.txt. You can get \
the emoji files from http://www.unicode.org/Public/emoji/4.0/)
    else
        # POSIX SHELL has no ${FOO:0:1}
        head=`echo "$UNICODE_EMOJI_DIR" | cut -c1`;
        if test $head != "/" ; then
            UNICODE_EMOJI_DIR=`realpath "$UNICODE_EMOJI_DIR"`
        fi
    fi
    if test ! -f $EMOJI_ANNOTATION_DIR/en.xml ; then
        AC_MSG_ERROR(Not found $EMOJI_ANNOTATION_DIR/en.xml. You can get \
https://github.com/fujiwarat/cldr-emoji-annotation)
    else
        head=`echo "$EMOJI_ANNOTATION_DIR" | cut -c1`;
        if test $head != "/" ; then
            EMOJI_ANNOTATION_DIR=`realpath "$EMOJI_ANNOTATION_DIR"`
        fi
    fi
    enable_emoji_dict="yes (enabled, use --disable-emoji-dict to disable)"
fi

# --disable-unicode-dict option.
AC_ARG_ENABLE(unicode-dict,
    AS_HELP_STRING([--disable-unicode-dict],
                   [Do not build Unicode dict files]),
    [enable_unicode_dict=$enableval],
    [enable_unicode_dict=yes]
)
AM_CONDITIONAL([ENABLE_UNICODE_DICT], [test x"$enable_unicode_dict" = x"yes"])

AC_ARG_WITH(ucd-dir,
    AS_HELP_STRING([--with-ucd-dir[=DIR]],
        [Set the directory of UCD (Unicode Character Database) files.
         (default: "/usr/share/unicode/ucd")]),
    UCD_DIR=$with_ucd_dir,
    UCD_DIR="/usr/share/unicode/ucd"
)
AC_SUBST(UCD_DIR)

if test x"$enable_unicode_dict" = x"yes"; then
    if test ! -f $UCD_DIR/NamesList.txt ; then
        AC_MSG_ERROR(Not found $UCD_DIR/NamesList.txt. You can get \
the UCD files from https://www.unicode.org/Public/UNIDATA/)
    elif test ! -f $UCD_DIR/Blocks.txt ; then
        AC_MSG_ERROR(Not found $UCD_DIR/Blocks.txt. You can get \
the UCD files from https://www.unicode.org/Public/UNIDATA/)
    else
        # POSIX SHELL has no ${FOO:0:1}
        head=`echo "$UCD_DIR" | cut -c1`;
        if test $head != "/" ; then
            UCD_DIR=`realpath "$UCD_DIR"`
        fi
    fi
    enable_unicode_dict="yes (enabled, use --disable-unicode-dict to disable)"
fi

AC_ARG_WITH(socket-dir,
    AS_HELP_STRING([--with-socket-dir[=DIR]],
        [Set the default socket directory to connect ibus-daemon with D-Bus
         connections (default: "$XDG_CACHE_HOME/ibus").
         The best practice of the socket directory would be unique per user
         not to modify by malicious users but XDG_RUNTIME_DIR is not integrated
         in BSD systems and the BSD's default is "/tmp".
         XDG_RUMTIME_DIR is not useful now because XDG_RUMTIME_DIR is available
         by login but not `su` command but ibus-daemon can be run with su.
         "$XDG_RUMTIME_DIR", "$XDG_CACHE_HOME", "$UID" are extracted by
         ibus-daemon.
         ibus-daemon also runs mkdir for the socket directory since BSD
         systems do not support abstract socket paths.
         The socket path on a NFS mount would not be a good idea likes
         "/home/$USER" because the directory is not sometimes accessible
         with the network condition.]),
    [IBUS_SOCKET_DIR=$with_socket_dir],
    [case $host in
         *linux*) IBUS_SOCKET_DIR='unix:tmpdir=$XDG_CACHE_HOME/ibus';;
         *)       IBUS_SOCKET_DIR='unix:tmpdir=/tmp';;
     esac]

)
AC_DEFINE_UNQUOTED(IBUS_SOCKET_DIR, "$IBUS_SOCKET_DIR",
                   [The default socket directory to connect ibus-daemon.])

# Check iso-codes.
PKG_CHECK_MODULES(ISOCODES, [
    iso-codes
])
ISOCODES_PREFIX=`$PKG_CONFIG iso-codes --variable=prefix`
AC_SUBST(ISOCODES_PREFIX)

AC_SUBST([GDBUS_CODEGEN], [`$PKG_CONFIG --variable gdbus_codegen gio-2.0`])

# OUTPUT files
AC_CONFIG_FILES([ po/Makefile.in
Makefile
ibus-1.0.pc
ibus.spec
client/Makefile
client/gtk2/Makefile
client/gtk3/Makefile
client/x11/Makefile
client/wayland/Makefile
src/Makefile
src/ibusversion.h
src/tests/Makefile
bus/Makefile
portal/Makefile
engine/Makefile
util/Makefile
util/IMdkit/Makefile
data/Makefile
data/annotations/Makefile
data/icons/Makefile
data/its/Makefile
data/keymaps/Makefile
data/dconf/Makefile
docs/Makefile
docs/reference/Makefile
docs/reference/ibus/ibus-docs.sgml
docs/reference/ibus/Makefile
m4/Makefile
ibus/_config.py
ibus/Makefile
ibus/interface/Makefile
ui/Makefile
ui/gtk3/Makefile
setup/Makefile
bindings/Makefile
bindings/pygobject/Makefile
bindings/vala/Makefile
conf/Makefile
conf/dconf/Makefile
conf/memconf/Makefile
tools/Makefile
])

AC_OUTPUT
AC_MSG_RESULT([
Build options:
  Version                       $IBUS_VERSION
  Install prefix                $prefix
  Build shared libs             $enable_shared
  Build static libs             $enable_static
  CFLAGS                        $CFLAGS
  PYTHON                        $PYTHON
  PYTHON2                       $PYTHON2
  Enable python2                $enable_python2
  Gtk2 immodule dir             $GTK2_IM_MODULEDIR
  Gtk3 immodule dir             $GTK3_IM_MODULEDIR
  Build gtk2 immodule           $enable_gtk2
  Build gtk3 immodule           $enable_gtk3
  Build XIM agent server        $enable_xim
  Build wayland support         $enable_wayland
  Build gdk3 wayland support    $enable_gdk3_wayland
  Build appindicator support    $enable_appindicator
  Build appindicator engine icon $enable_appindicator_engine_icon
  Build python library          $enable_python_library
  Build memconf modules         $enable_memconf
  Build dconf modules           $enable_dconf
  Build introspection           $found_introspection
  IBus-1.0.gir scannerflags     "$IBUS_GIR_SCANNERFLAGS"
  Build vala binding            $enable_vala
  Build document                $enable_gtk_doc
  Build UI                      $enable_ui
  Build engine                  $enable_engine
  Enable key snooper            $enable_key_snooper
  No snooper regexes            "$NO_SNOOPER_APPS"
  Panel icon                    "$IBUS_ICON_KEYBOARD"
  Enable surrounding-text       $enable_surrounding_text
  Enable Emoji dict             $enable_emoji_dict
  Unicode Emoji directory       $UNICODE_EMOJI_DIR
  CLDR annotation directory     $EMOJI_ANNOTATION_DIR
  Enable Unicode dict           $enable_unicode_dict
  UCD directory                 $UCD_DIR
  Socket directory              "$IBUS_SOCKET_DIR"
  Run test cases                $enable_tests
  Install tests                 $enable_install_tests
])

